home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 January / ChipCD_1.03.iso / zkuste / delphi / kolekce / d3456 / GmPrintSuite_2_61_Lite.exe / {app} / GmStream.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  2002-10-05  |  7.8 KB  |  292 lines

  1. {******************************************************************************}
  2. {                                                                              }
  3. {                          GmStream.pas v2.61 Pro                              }
  4. {                                                                              }
  5. {           Copyright (c) 2001 Graham Murt  - www.MurtSoft.co.uk               }
  6. {                                                                              }
  7. {   Feel free to e-mail me with any comments, suggestions, bugs or help at:    }
  8. {                                                                              }
  9. {                           graham@murtsoft.co.uk                              }
  10. {                                                                              }
  11. {******************************************************************************}
  12.  
  13. unit GmStream;
  14.  
  15. interface
  16.  
  17. uses Windows, Classes, GmTypes, Graphics;
  18.  
  19. type
  20.   TGmExtStream = class(TMemoryStream)
  21.   public
  22.     function ReadByte: Byte;
  23.     function ReadRect: TRect;
  24.     function ReadInteger: integer;
  25.     function ReadExtended: Extended;
  26.     function ReadStr: string;
  27.     function ReadBoolean: Boolean;
  28.     function ReadDateTime: TDateTime;
  29.     function ReadBrush: TGmBrush;
  30.     function ReadFont: TGmFont;
  31.     function ReadPen: TGmPen;
  32.     procedure LoadFromStream(AStream: TStream);
  33.     procedure ReadSubStream(ASubStream: TStream);
  34.     procedure SaveToStream(AStream: TStream);
  35.     procedure WriteByte(AValue: Byte);
  36.     procedure WriteRect(ARect: TRect);
  37.     procedure WriteInteger(AValue: integer);
  38.     procedure WriteExtended(AValue: Extended);
  39.     procedure WriteStr(const AValue: string);
  40.     procedure WriteBoolean(AValue: Boolean);
  41.     procedure WriteDateTime(AValue: TDateTime);
  42.     procedure WriteBrush(AValue: TGmBrush);
  43.     procedure WriteFont(AValue: TGmFont);
  44.     procedure WritePen(AValue: TGmPen);
  45.     procedure WriteSubStream(ASubStream: TStream);
  46.   end;
  47.  
  48.   function FontStringToStyle(AStyle: string): TFontStyles;
  49.   function FontStyleToString(AStyle: TFontStyles): string;
  50.  
  51. implementation
  52.  
  53. function FontStringToStyle(AStyle: string): TFontStyles;
  54. begin
  55.   Result := [];
  56.   if Pos('B', AStyle) <> 0 then Result := Result + [fsBold];
  57.   if Pos('I', AStyle) <> 0 then Result := Result + [fsItalic];
  58.   if Pos('U', AStyle) <> 0 then Result := Result + [fsUnderline];
  59.   if Pos('S', AStyle) <> 0 then Result := Result + [fsStrikeOut];
  60. end;
  61.  
  62.  
  63. function FontStyleToString(AStyle: TFontStyles): string;
  64. begin
  65.   Result := '';
  66.   if (fsBold in AStyle)      then Result := Result + 'B';
  67.   if (fsItalic in AStyle)    then Result := Result + 'I';
  68.   if (fsUnderline in AStyle) then Result := Result + 'U';
  69.   if (fsStrikeOut in AStyle) then Result := Result + 'S';
  70. end;
  71.  
  72. function TGmExtStream.ReadByte: Byte;
  73. begin
  74.   if Self.Position < Self.Size then Read(Result, SizeOf(Result));
  75. end;
  76.  
  77. function TGmExtStream.ReadRect: TRect;
  78. begin
  79.   Result.Left   := ReadInteger;
  80.   Result.Top    := ReadInteger;
  81.   Result.Right  := ReadInteger;
  82.   Result.Bottom := ReadInteger;
  83. end;
  84.  
  85. function TGmExtStream.ReadInteger: integer;
  86. begin
  87.   if Self.Position < Self.Size then Read(Result, SizeOf(Result));
  88. end;
  89.  
  90. function TGmExtStream.ReadExtended: Extended;
  91. begin
  92.   Read(Result, SizeOf(Result));
  93. end;
  94.  
  95. function TGmExtStream.ReadStr: string;
  96. var
  97.   StringLength: integer;
  98. begin
  99.   StringLength := ReadInteger;
  100.   SetLength(Result, StringLength);
  101.   if StringLength > 0 then
  102.     Read(Result[1], StringLength)
  103. end;
  104.  
  105. function TGmExtStream.ReadBoolean: Boolean;
  106. begin
  107.   Read(Result, SizeOf(Result));
  108. end;
  109.  
  110. function TGmExtStream.ReadDateTime: TDateTime;
  111. begin
  112.   Read(Result, SizeOf(Result));
  113. end;
  114.  
  115. function TGmExtStream.ReadBrush: TGmBrush;
  116. var
  117.   ABrushStream: TGmExtStream;
  118. begin
  119.   ABrushStream := TGmExtStream.Create;
  120.   try
  121.     ABrushStream.LoadFromStream(Self);
  122.     Result.Color := ABrushStream.ReadInteger;
  123.     Result.Style := TBrushStyle(ABrushStream.ReadInteger);
  124.   finally
  125.     ABrushStream.Free;
  126.   end;
  127. end;
  128.  
  129. function TGmExtStream.ReadFont: TGmFont;
  130. var
  131.   AFontStream: TGmExtStream;
  132. begin
  133.   AFontStream := TGmExtStream.Create;
  134.   try
  135.     AFontStream.LoadFromStream(Self);
  136.     Result.Angle := AFontStream.ReadExtended;
  137.     Result.Color := AFontStream.ReadInteger;
  138.     Result.Name  := AFontStream.ReadStr;
  139.     Result.Size  := AFontStream.ReadInteger;
  140.     Result.Style := FontStringToStyle(AFontStream.ReadStr)
  141.   finally
  142.     AFontStream.Free;
  143.   end;
  144. end;
  145.  
  146. function TGmExtStream.ReadPen: TGmPen;
  147. var
  148.   APenStream: TGmExtStream;
  149. begin
  150.   APenStream := TGmExtStream.Create;
  151.   try
  152.     APenStream.LoadFromStream(Self);
  153.     Result.Color := APenStream.ReadInteger;
  154.     Result.Style := TPenStyle(APenStream.ReadInteger);
  155.     Result.Width := APenStream.ReadInteger;
  156.     Result.Mode  := TPenMode(APenStream.ReadInteger);
  157.   finally
  158.     APenStream.Free;
  159.   end;
  160. end;
  161.  
  162. procedure TGmExtStream.LoadFromStream(AStream: TStream);
  163. var
  164.   StreamSize: integer;
  165. begin
  166.   Clear;
  167.   AStream.ReadBuffer(StreamSize, SizeOf(StreamSize));
  168.   CopyFrom(AStream, StreamSize);
  169.   Seek(0, soFromBeginning);
  170. end;
  171.  
  172. procedure TGmExtStream.SaveToStream(AStream: TStream);
  173. var
  174.   StreamSize: integer;
  175. begin
  176.   Seek(0, soFromBeginning);
  177.   StreamSize := Self.Size;
  178.   AStream.WriteBuffer(StreamSize, SizeOf(StreamSize));
  179.   AStream.CopyFrom(Self, StreamSize);
  180. end;
  181.  
  182. procedure TGmExtStream.ReadSubStream(ASubStream: TStream);
  183. var
  184.   StreamSize: integer;
  185. begin
  186.   StreamSize := ReadInteger;
  187.   ASubStream.CopyFrom(Self, StreamSize);
  188. end;
  189.  
  190. procedure TGmExtStream.WriteRect(ARect: TRect);
  191. begin
  192.   WriteInteger(ARect.Left);
  193.   WriteInteger(ARect.Top);
  194.   WriteInteger(ARect.Right);
  195.   WriteInteger(ARect.Bottom);
  196. end;
  197.  
  198. procedure TGmExtStream.WriteByte(AValue: Byte);
  199. begin
  200.   Write(AValue, SizeOf(AValue));
  201. end;
  202.  
  203. procedure TGmExtStream.WriteInteger(AValue: integer);
  204. begin
  205.   Write(AValue, SizeOf(AValue));
  206. end;
  207.  
  208. procedure TGmExtStream.WriteExtended(AValue: Extended);
  209. begin
  210.   Write(AValue, SizeOf(AValue));
  211. end;
  212.  
  213. procedure TGmExtStream.WriteStr(const AValue: string);
  214. var
  215.   StringLength: integer;
  216. begin
  217.   StringLength := Length(AValue);
  218.   WriteInteger(StringLength);
  219.   if StringLength > 0 then
  220.     Write(AValue[1], StringLength);
  221. end;
  222.  
  223. procedure TGmExtStream.WriteBoolean(AValue: Boolean);
  224. begin
  225.   Write(AValue, SizeOf(AValue));
  226. end;
  227.  
  228. procedure TGmExtStream.WriteDateTime(AValue: TDateTime);
  229. begin
  230.   Write(AValue, SizeOf(AValue));
  231. end;
  232.  
  233. procedure TGmExtStream.WriteBrush(AValue: TGmBrush);
  234. var
  235.   ABrushStream: TGmExtStream;
  236. begin
  237.   ABrushStream := TGmExtStream.Create;
  238.   try
  239.     ABrushStream.WriteInteger(AValue.Color);
  240.     ABrushStream.WriteInteger(Ord(AValue.Style));
  241.   finally
  242.     ABrushStream.SaveToStream(Self);
  243.     ABrushStream.Free;
  244.   end;
  245. end;
  246.  
  247. procedure TGmExtStream.WriteFont(AValue: TGmFont);
  248. var
  249.   AFontStream: TGmExtStream;
  250. begin
  251.   AFontStream := TGmExtStream.Create;
  252.   try
  253.     AFontStream.WriteExtended(AValue.Angle);
  254.     AFontStream.WriteInteger(AValue.Color);
  255.     AFontStream.WriteStr(AValue.Name);
  256.     AFontStream.WriteInteger(AValue.Size);
  257.     AFontStream.WriteStr(FontStyleToString(AValue.Style));
  258.   finally
  259.     AFontStream.SaveToStream(Self);
  260.     AFontStream.Free;
  261.   end;
  262. end;
  263.  
  264. procedure TGmExtStream.WritePen(AValue: TGmPen);
  265. var
  266.   APenStream: TGmExtStream;
  267. begin
  268.   APenStream := TGmExtStream.Create;
  269.   try
  270.     APenStream.WriteInteger(AValue.Color);
  271.     APenStream.WriteInteger(Ord(AValue.Style));
  272.  
  273.     APenStream.WriteInteger(AValue.Width);
  274.     APenStream.WriteInteger(Ord(AValue.Mode));
  275.   finally
  276.     APenStream.SaveToStream(Self);
  277.     APenStream.Free;
  278.   end;
  279. end;
  280.  
  281. procedure TGmExtStream.WriteSubStream(ASubStream: TStream);
  282. var
  283.   StreamSize: integer;
  284. begin
  285.   StreamSize := ASubStream.Size;
  286.   WriteInteger(StreamSize);
  287.   ASubStream.Seek(0, soFromBeginning);
  288.   CopyFrom(ASubStream, StreamSize);
  289. end;
  290.  
  291. end.
  292.